#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/wait.h>
#include <vector>

typedef void (*handler_t)();
std::vector<handler_t> handlers;
void run_one()
{
    printf("这是一个临时任务1\n");
}
void run_two()
{
    printf("这是一个临时任务2\n");
}
void Load()
{
    handlers.push_back(run_one);
    handlers.push_back(run_two);
}
int main()
{
    pid_t id=fork();
    if(id==0)
    {
        int n=5;
        while(n)
        {
            printf("我是子进程: %d\n",n--);
            sleep(1);
        }
        exit(11);
    }
    else{
        int quit=0;
        while(!quit)
        {
            int status=0;
            pid_t res=waitpid(-1,&status,WNOHANG);
            if(res>0)
            {
                printf("等待子进程退出成功，退出码：%d\n",WEXITSTATUS(status));
                quit=1;
            }
            else if(res==0)
            {
                printf("子进程还在运行中，暂时没有退出，父进程可以等等,处理其他事情\n");
                if(handlers.empty()) Load();
                for(auto iter:handlers)
                {
                    iter();
                }
            }
            else{
                printf("等待失败\n");
                quit=1;
            }
            sleep(1);
        }
    }
    return 0;
}
